/**
 * 将字节数转换为更易读的格式 (KB, MB, GB, TB)
 * @param {number} bytes - 字节数
 * @param {number} decimals - 保留的小数位数
 * @returns {string} - 格式化后的字符串
 */
export function formatBytes(bytes, decimals = 2) {
  if (!+bytes) return '0 Bytes';

  const k = 1024;
  const dm = decimals < 0 ? 0 : decimals;
  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];

  const i = Math.floor(Math.log(bytes) / Math.log(k));

  return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
}

/**
 * 将秒数转换为更易读的运行时长格式 (天, 小时, 分钟)
 * @param {number} seconds - 总秒数
 * @returns {string} - 格式化后的字符串
 */
export function formatUptime(seconds) {
  if (!+seconds) return '0 分钟';
  
  seconds = Math.floor(seconds);
  const d = Math.floor(seconds / (3600 * 24));
  const h = Math.floor((seconds % (3600 * 24)) / 3600);
  const m = Math.floor((seconds % 3600) / 60);

  const dDisplay = d > 0 ? d + (d === 1 ? ' 天, ' : ' 天, ') : '';
  const hDisplay = h > 0 ? h + (h === 1 ? ' 小时, ' : ' 小时, ') : '';
  const mDisplay = m > 0 ? m + (m === 1 ? ' 分钟' : ' 分钟') : '';
  
  let result = dDisplay + hDisplay + mDisplay;
  if (result.endsWith(', ')) {
      result = result.slice(0, -2);
  }
  
  return result || '小于 1 分钟';
} 